import java.util.Stack;

public class BasicCalculatorII {
    public int calculate(String s) {
        char[] ch = s.toCharArray();
        Stack<Integer> stack = new Stack<>();
        char op = '+'; // 记录数字前面的符号
        int i = 0;
        int n = ch.length;
        while (i < n) {
            if (ch[i] == ' ') {
                // 如果当前字符是空格, 跳过当前字符
                i++;
            } else if (ch[i] >= '0' && ch[i] <= '9') {
                // 1.如果当前字符属于数字, 则提取数字并按规则入栈
                int tmp = 0;
                while (i < n && ch[i] >= '0' && ch[i] <= '9') {
                    // 如果当前字符属于数字, 则提取出数字存放到 tmp 中
                    tmp = tmp * 10 + (ch[i] - '0');
                    i++;
                }

                // 根据 op 的信息来把 tmp 入栈
                if (op == '+') {
                    stack.push(tmp);
                } else if (op == '-') {
                    stack.push(-tmp);
                } else if (op == '*') {
                    stack.push(stack.pop() * tmp);
                } else if (op == '/') {
                    stack.push(stack.pop() / tmp);
                }
            }else {
                // 如果当前字符是其他运算符, 则更新 op 信息
                op = ch[i];
                i++;
            }
        }

        // 将栈中元素相加
        int sum = 0;
        while(!stack.isEmpty()) {
            sum += stack.pop();
        }
        return sum;
    }
}
